const express = require('express')
const cors = require('cors')
// 用户路由
const userRouter = require('./router/user')

const joi = require('joi')
const app = express()


// 跨域中间件
app.use(cors())
// 解析表单数据中间件
app.use(express.urlencoded({ extended: false }))
// 封装通用的res.cc函数
app.use((req, res, next) => {
    // 为res对象挂一个函数
    res.cc = function (err, status = 1) {
        res.send({
            status,
            message: err instanceof Error ? err.message : err
        })

    }
    // 调用下一个中间件
    next()
})
// 引入解析jwt中间件
const { expressjwt: jwtMiddleware } = require('express-jwt')
const config = require('./config')
/**
 * 认证成功后在req上挂在一个user对象
 */
app.use(jwtMiddleware({ secret: config.jwtSecretKey, algorithms: ['HS256'],requestProperty:'user' }).unless({ path: [/^\/api\//] }))



// 注册用户路由中间件
/**
 * 调用数据校验中间件
 * 
 */
app.use('/api', userRouter)
// 用户模块的router
const userinfoRouter=require('./router/userinfo')
app.use('/my',userinfoRouter)
// 定义错误级别的中间件
app.use((err, req, res, next) => {
    console.log(err);
    if (err.name == 'UnauthorizedError') {
        return res.cc('身份认证失败')
    }
    if (err instanceof joi.ValidationError) {
        return res.cc(err)
    }

    
    // 未知错误
    return res.cc()
})


app.listen(8080, function () {
    console.log('server run on 8080')
})